// 引包
var express = require('express')
var router = require('./routes')
var path = require('path')
var bodyParser = require('body-parser')
var session = require('express-session')
//跨域问题解决方面
const cors = require('cors'); 

// 1. 创建app
var app = express();


// ---------------配置解析表单post请求体中间件（一定要在路由挂载之前）-----------------
// 配置body-parser
// 只要加入这个配置，则在req请求对象上会多出来一个属性：body
// 也就是说可以直接通过req.body来获取表单post请求数据


// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false })) //url编码
// parse application/json
app.use(bodyParser.json())

app.use(cors({
    origin: ['http://localhost:9528','http://localhost:8080','http://192.168.1.101'],//可设置多个跨域
    credentials: true//允许客户端携带验证信息
}))


//-----------中间件----------
// 不关心请求路劲和请求方法的中间件，任何请求都会进入这个中间件
// 中间件本身是一个方法，该方法接受三个参数，req请求对象，res响应对象，next下一个中间件
// app.use((req, res) => {
    // 默认不会往后走
    // 除非配置next()
// })
 
// 关于请求路径的中间件，例如以/xx开头的中间件
// app.use('/xxx',(req, res) => {
    // req.url会不包含xxx
// })

// 在express这个框架中，默认不支持session和cookie
// 但是我们可以使用第三方中间件：express-session来解决




// app.use({
    //配置加密字符串，它会在原有的基础上加上这个字符串拼起来去加密
    //目的是为了增加安全性，防止客户端恶意伪造
//     secret: 'keyboard cat',
//     resave: false,
    //无论你是否用到session，都默认分配钥匙
//     saveUninitialized: true
// })




// 把路由容器挂载到app服务中
app.use(router);
// 处理静态资源,__dirname动态获取路径，join()方法帮你拼接路径
app.use('/public/', express.static(path.join(__dirname, './public/')));

app.get('/',function(req,res){
    res.send('hello world');
})


// 错误处理中间件
//404错误处理
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// 当使用next(err)，就会来到这个函数
app.use((err, req, res, next)=> {
    res.status(500).json({
        code: 50000,
        message: '服务端错误',
        data: err.message
    })
})

app.listen(5000,function(){
    console.log('express app is runing...');
})